package com.lingkang.sales.service;

import com.lingkang.sales.data.dto.ResponsePageResult;
import com.lingkang.sales.data.dto.ResponseResult;
import com.lingkang.sales.data.entity.SaPermission;
import com.lingkang.sales.data.entity.SaRole;
import java.util.List;

/**
 * @author linke
 * @date 2020/11/14 20:51
 * @description 权限相关
 */
public interface AuthService {

  /**
   * 获取用户的角色
   *
   * @param username
   * @return
   */
  List<SaRole> getRoles(String username);

  /**
   * 判断是否有权限访问
   *
   * @param targetDomainObject
   * @param permission
   * @return
   */
  boolean hasPermission(String targetDomainObject, String permission);

  /**
   * 添加角色
   *
   * @param role
   * @param desc
   * @return
   */
  ResponseResult addRole(String role, String desc);

  /**
   * 获取角色授权
   *
   * @param roleName
   * @return
   */
  SaPermission getPermission(String roleName);

  /**
   * 获取角色列表
   *
   * @param page
   * @param size
   * @return
   */
  ResponsePageResult getRoleList(Integer page, Integer size,String search);

  /**
   * 删除角色
   *
   * @param id
   * @return
   */
  ResponseResult roleDelete(Integer id);

  /**
   * 更新角色
   *
   * @param id
   * @param roleName
   * @param description
   * @return
   */
  ResponseResult roleUpdate(Integer id, String roleName, String description);

  /**
   * 获取权限裂变
   *
   * @param page
   * @param size
   * @return
   */
  ResponsePageResult permissionList(Integer page, Integer size,String search);

  /**
   * 更新角色授权
   *
   * @param roleName
   * @param source
   * @param action
   * @param description
   * @return
   */
  ResponseResult permissionUpdate(String roleName, String source, String action, String description);


  /**
   * 获取用户存在的角色
   * @return
   */
  List<String> getUserExistRole();

  /**
   * 删除角色授权
   * @param roleName
   * @return
   */
  ResponseResult permissionDelete(String roleName);

  /**
   * 获取角色列表
   * @return
   */
  List<SaRole> getRoleListExcludeExist();

  /**
   * 添加权限
   * @param roleName
   * @param source
   * @param action
   * @param description
   * @return
   */
  ResponseResult permissionAdd(String roleName, String source, String action, String description);
}
